Channel is the Kotlin approach for handling a "hot stream" of items, where the
work to build the items starts immediately, irrespective of whether anyone is
around to consume the results.
A simple way to create a Channel is to use the produce() function on CoroutineScope. You
provide a lambda expression, and it calls send() for every item that should
be placed into the stream. Here, we send a series of random numbers, with a delay
between each. Since produce() is defined on CoroutineScope, though, we need
to either:
- Call - produce()from directly inside of our- launch()coroutine builder (as- thisis a- CoroutineScopein that lambda expression), or
- Define our function that uses - produce()(- randomPercentages()) as an extension function on- CoroutineScope
A simple way to consume a Channel is to call consumeEach(). This takes a lambda
expression, and it is passed each send item from the Channel. consumeEach()
is a suspend function, so we need to call consumeEach() from inside of another
suspend function or from a coroutine builder, such as launch().